设计模式-观察者模式

设计模式之观察者模式

什么是观察者模式

形象的来说,观察者模式包含一个被观察者(subject)以及若干观察者(observer),observer观察subject,当subject发出一个动作时,observer观察到后作出相应反应。在程序中则是某个类(subject)达到某种触发条件后向其他类发送通知(通常是执行某些方法的信息),然后这些类执行相应的方法。

观察者模式的作用

  1. 用于程序的解耦。观察者模式通过依赖于抽象的接口来减少类与类之间的直接依赖。
  2. 可以作为一种通知的机制,将更新通知给其它的对象。

观察者模式的缺点

  • 当一个被观察者有很多的直接或间接的观察者时,要通知到所有的观察者需要耗费很多的时间。
  • 当被观察者之间循环依赖时(比如:A通知B改变C,C的改变引起A的改变,继而又触发了A通知B),程序会进入循环调用,导致系统崩溃。

观察者模式的实现要点

  1. 要创建一个接口用以约束所有被观察者,提供消息传递的通道
  2. 被观察者需要有一个存放消息的容器,一般是接口的一个列表;同时被观察者要具有订阅观察者和取消订阅的方法,用以动态的增加减少观察者的数量。
  3. 实现消息的传递——通过调用接口列表中的各个方法。

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
 class Program
{
static void Main(string[] args)
{
Cat cat = new Cat();
cat.Add(new Dog());
cat.Add(new Duck());
cat.Add(new mouse());
cat.Add(new people());
cat.Miao();
Console.Read();
}
}

interface Ioberver
{
void Action();
}

class Chicken:Ioberver
{
public void Action()
{
this.Woo();
}
public void Woo()
{
Console.WriteLine("{0} Woo", this.GetType().Name);
}
}

class Dog : Ioberver
{
public void Action()
{
this.Wang();
}
public void Wang()
{
Console.WriteLine($"{this.GetType().Name} 汪汪汪");
}
}

class Duck : Ioberver
{
public void Action()
{
this.Gaga();
}
public void Gaga()
{
Console.WriteLine($"{this.GetType().Name} 嘎嘎嘎");
}
}

class mouse : Ioberver
{
public void Action()
{
this.Zhi();
}
public void Zhi()
{
Console.WriteLine($"{this.GetType().Name} 吱吱吱");
}
}


class Cat
{
public void Miao()
{
Console.WriteLine("{0} miao",this.GetType().Name);
if(this._ObserverList!=null && this._ObserverList.Count > 0)
{
foreach (var observer in _ObserverList)
{
observer.Action();
}
}
}
public List<Ioberver> _ObserverList = new List<Ioberver>();
public void Add(Ioberver observer)
{
this._ObserverList.Add(observer);
}
public void Remove(Ioberver observer)
{
this._ObserverList.Remove(observer);
}
}

运行结果:

mark

文章目录
  1. 1. 设计模式之观察者模式
    1. 1.1. 什么是观察者模式
    2. 1.2. 观察者模式的作用
    3. 1.3. 观察者模式的缺点
    4. 1.4. 观察者模式的实现要点